#include <stdio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include "wifi_smartconfig.h"
#include "nvs_flash.h"
#include "freertos/event_groups.h"
#include "driver/gpio.h"
#include "button.h"
#include "led.h"
#include "bsp_relay.h"

// 按键事件组
static EventGroupHandle_t s_pressEvent;
#define SHORT_EV BIT0 // 短按
#define LONG_EV BIT1  // 长按
#define BTN_GPIO 0

/** 短按按键回调函数
 * @param 无
 * @return 无
*/
void short_press_handle(void)
{
    xEventGroupSetBits(s_pressEvent,SHORT_EV);
}


/** 长按按键回调函数
 * @param 无
 * @return 无
 */
void long_press_handle(void)
{
    xEventGroupSetBits(s_pressEvent, LONG_EV);
}


void Relay_Test_start(void)
{

}
void app_main(void)
{
    nvs_flash_init();  // 初始化NVS
    initialise_wifi(); // 初始化wifi
    led_breath_init();
    Relay_GPIO_Init();
    s_pressEvent = xEventGroupCreate();
    button_config_t btn_cfg =
        {
            .gpio_num = BTN_GPIO,        // gpio号
            .active_level = 0,           // 按下的电平
            .long_press_time = 3000,     // 长按时间
            .short_cb = short_press_handle,            // 短按回调函数
            .long_cb = smartconfig_start // 长按回调函数
        };
    button_event_set(&btn_cfg); // 添加按键响应事件处理
    EventBits_t ev;

    while (1)
    {
        ev = xEventGroupWaitBits(s_pressEvent, SHORT_EV | LONG_EV, pdTRUE, pdFALSE, portMAX_DELAY);
        if (ev & SHORT_EV)
        {
            // 短按事件，亮一下熄灭
            // 控制继电器1吸合
            Set_Relay_Switch(0, 1);
            printf("\r\n继电器1吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            //控制继电器2吸合
            Set_Relay_Switch(1, 1);
            printf("\r\n继电器2吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(2, 1);
            printf("\r\n继电器3吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(3, 1);
            printf("\r\n继电器4吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(4, 1);
            printf("\r\n继电器5吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(5, 1);
            printf("\r\n继电器6吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(6, 1);
            printf("\r\n继电器7吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            Set_Relay_Switch(7, 1);
            printf("\r\n继电器8吸合!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器1断开
            Set_Relay_Switch(0, 0);
            printf("\r\n继电器1断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器2断开
            Set_Relay_Switch(1, 0);
            printf("\r\n继电器2断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器3断开
            Set_Relay_Switch(2, 0);
            printf("\r\n继电器3断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器4断开
            Set_Relay_Switch(3, 0);
            printf("\r\n继电器4断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器5断开
            Set_Relay_Switch(4, 0);
            printf("\r\n继电器5断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器6断开
            Set_Relay_Switch(5, 0);
            printf("\r\n继电器6断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器7断开
            Set_Relay_Switch(6, 0);
            printf("\r\n继电器7断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

            // 控制继电器8断开
            Set_Relay_Switch(7, 0);
            printf("\r\n继电器8断开!\r\n");
            vTaskDelay(1000 / portTICK_PERIOD_MS);

        }
        if (ev & LONG_EV)
        {
            smartconfig_start(); // 检测到长按事件，启动smartconfig
        }
        xEventGroupClearBits(s_pressEvent,SHORT_EV);
        xEventGroupClearBits(s_pressEvent,LONG_EV);
    }
}
